// 存储从数据库获取的考试数据
let allExams = [];          // 所有考试
let studentExams = [];      // 学生个人考试
let mergedExams = [];       // 合并后的考试数据

// DOM 加载完成后执行
$(document).ready(function() {
    // 初始化页面 - 同时获取两种考试数据
    fetchAllExams();
    fetchStudentExams();

    // 筛选条件变更事件
    $("#examStatusFilter").on("change", function() {
        renderExams();
    });

    // 排序条件变更事件
    $("#sortOrder").on("change", function() {
        renderExams();
    });

    // 关闭弹窗事件
    $("#closeModal").on("click", function() {
        $("#examModal").removeClass("show");
    });

    // 点击弹窗外部关闭
    $(window).on("click", function(e) {
        if ($(e.target).is("#examModal")) {
            $("#examModal").removeClass("show");
        }
    });
});

/**
 * 获取所有考试数据
 */
function fetchAllExams() {
    $.ajax({
        url: '/studentexam/select',
        type: 'GET',
        dataType: 'json',
        success: function(response) {
            if (response.code === "0000") {
                allExams = response.data || [];
                mergeAndRenderExams(); // 合并并渲染
            } else {
                console.error('获取所有考试失败:', response.msg);
                allExams = [];
                mergeAndRenderExams(); // 即使失败也尝试合并渲染
            }
        },
        error: function() {
            console.error('获取所有考试出错');
            allExams = [];
            mergeAndRenderExams();
        }
    });
}

/**
 * 获取当前学生的考试数据
 */
function fetchStudentExams() {
    $.ajax({
        url: '/studentexam/selectStudent',
        type: 'GET',
        dataType: 'json',
        success: function(response) {
            if (response.code === "0000") {
                studentExams = response.data || [];
                mergeAndRenderExams(); // 合并并渲染
            } else {
                console.error('获取学生考试失败:', response.msg);
                studentExams = [];
                mergeAndRenderExams(); // 即使失败也尝试合并渲染
            }
        },
        error: function() {
            console.error('获取学生考试出错');
            studentExams = [];
            mergeAndRenderExams();
        }
    });
}

/**
 * 合并两种考试数据并去重，然后渲染
 */
function mergeAndRenderExams() {
    // 合并数组并根据examId去重
    const examMap = new Map();

    // 先添加所有考试
    allExams.forEach(exam => {
        examMap.set(exam.examId, { ...exam, isMyExam: false });
    });

    // 再添加学生个人考试（会覆盖重复的考试，标记为个人考试）
    studentExams.forEach(exam => {
        examMap.set(exam.examId, { ...exam, isMyExam: true });
    });

    // 转换为数组
    mergedExams = Array.from(examMap.values());

    // 渲染合并后的考试列表
    renderExams();
}

/**
 * 格式化日期时间
 * @param {string} dateTimeString - 日期时间字符串
 * @returns {string} 格式化后的日期时间
 */
function formatDateTime(dateTimeString) {
    if (!dateTimeString) return "未设置";

    const date = new Date(dateTimeString);
    return date.toLocaleString('zh-CN', {
        year: 'numeric',
        month: '2-digit',
        day: '2-digit',
        hour: '2-digit',
        minute: '2-digit'
    });
}

/**
 * 获取考试状态
 * @param {Object} exam - 考试对象
 * @returns {string} 状态名称：未开始、进行中、已结束
 */
function getExamStatus(exam) {
    // 检查是否有发布时间
    if (!exam.releaseTime) return "未发布";

    const now = new Date();
    const releaseTime = new Date(exam.releaseTime);
    // 计算考试结束时间（发布时间 + 考试时长，假设 examDuration 单位为分钟）
    const endTime = new Date(releaseTime.getTime() + exam.examDuration * 60000);

    if (now < releaseTime) {
        return "未开始";
    } else if (now <= endTime) {
        return "进行中";
    } else {
        return "已结束";
    }
}

/**
 * 渲染考试列表
 */
function renderExams() {
    const statusFilter = $("#examStatusFilter").val();
    const sort = $("#sortOrder").val();

    // 筛选考试
    let filteredExams = [...mergedExams];
    if (statusFilter === 'active') {
        filteredExams = filteredExams.filter(exam => getExamStatus(exam) === "进行中");
    }

    // 排序考试 - 使用发布时间或创建时间进行排序
    filteredExams.sort((a, b) => {
        const dateA = a.releaseTime ? new Date(a.releaseTime) : new Date(a.createTime);
        const dateB = b.releaseTime ? new Date(b.releaseTime) : new Date(b.createTime);
        return sort === 'desc' ? dateB - dateA : dateA - dateB;
    });

    // 清空列表
    const $examList = $("#examList");
    $examList.empty();

    // 如果没有数据，显示提示信息
    if (filteredExams.length === 0) {
        $examList.html(`<div class="loading">没有找到符合条件的考试</div>`);
        return;
    }

    // 生成考试卡片
    filteredExams.forEach(exam => {
        const status = getExamStatus(exam);
        const $examCard = $("<div>").addClass("exam-card");
        // 根据状态添加不同样式
        $examCard.addClass(`status-${status.toLowerCase()}`);
        // 如果是学生自己的考试，添加特殊标记
        if (exam.isMyExam) {
            $examCard.addClass("my-exam");
        }

        $examCard.html(`
            <h3>
                ${exam.examName}
                ${exam.isMyExam ? '<span class="my-exam-tag">我的考试</span>' : ''}
            </h3>
            <div class="exam-info">
                <p><strong>考试名称：</strong>${exam.examName}</p>
                <p><strong>发布时间：</strong>${formatDateTime(exam.releaseTime)}</p>
                <p><strong>考试时长：</strong>${exam.examDuration || 0}分钟</p>
                <p><strong>状态：</strong><span class="status ${status.toLowerCase()}">${status}</span></p>
                <p><strong>发布者：</strong>${exam.creatorName || '未知'}</p>
            </div>
        `);

        // 点击卡片查看详情（未开始的考试不能打开）
        $examCard.on("click", function() {
            if (status === "未开始") {
                alert("考试尚未开始，暂时无法查看详情");

            } else if (status === "进行中") {
                // 跳转到考试页面，并传递考试ID
                console.log(exam)
                window.location.href = `/LLMTchStd/exam?id=${exam.examId}`;
            } else {
                // 已结束的考试显示详情
                $("#modalTitle").text(exam.examName);
                $("#modalBody").html(`
                    <p><strong>考试名称：</strong>${exam.examName}</p>
                    <p><strong>发布时间：</strong>${formatDateTime(exam.releaseTime)}</p>
                    <p><strong>考试时长：</strong>${exam.examDuration || 0}分钟</p>
                    <p><strong>结束时间：</strong>${formatDateTime(new Date(new Date(exam.releaseTime).getTime() + (exam.examDuration || 0) * 60000))}</p>
                    <p><strong>状态：</strong><span class="status ${status.toLowerCase()}">${status}</span></p>
                    <p><strong>发布者：</strong>${exam.creatorName || '未知'}</p>
                    ${exam.isMyExam ? '<p><strong>类型：</strong>我的考试</p>' : ''}
                `);
                $("#examModal").addClass("show");
            }
        });

        $examList.append($examCard);
    });
}
